package com.push.graph.utils;

import com.alibaba.fastjson.JSONObject;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Row;

import java.util.ArrayList;
import java.util.Map;

/**
 * @author 324428Robert
 */
public class TransformUtil {
    public static String JSONObject2Neo4jString(JSONObject object) {
        StringBuilder res = new StringBuilder();
        for (Map.Entry<String, Object> entry : object.entrySet()) {
            String key = entry.getKey();
            Object value = entry.getValue();
            if (value instanceof String) {
                res.append(key).append(": \"").append(value).append("\", ");
            } else {
                res.append(key).append(": ").append(value).append(", ");
            }
        }
        res = new StringBuilder("{" + res.substring(0, res.length() - 2) + "}");
        return res.toString();
    }


    public static JSONObject Row2JSONObject(Row row, ArrayList<String> tableHeader) {
        // 创建一个 JSON 对象
        JSONObject jsonObject = new JSONObject();

        // 遍历 Row 中的每个单元格，并将其添加到 JSON 对象中
        for (int i = 0; i < row.getLastCellNum(); i++) {
            Cell cell = row.getCell(i);
            String key = tableHeader.get(i); // 使用默认的键名，你也可以根据需要自定义键名
            Object value = getCellValue(cell); // 获取单元格的值
            jsonObject.put(key, value);
        }
        return jsonObject;
    }

    // 根据单元格的类型获取其值
    private static Object getCellValue(Cell cell) {
        if (cell == null) {
            return null;
        }

        switch (cell.getCellType()) {
            case STRING:
                return cell.getStringCellValue();
            case NUMERIC:
                if (DateUtil.isCellDateFormatted(cell)) {
                    return cell.getDateCellValue();
                } else {
                    return cell.getNumericCellValue();
                }
            case BOOLEAN:
                return cell.getBooleanCellValue();
            case FORMULA:
                return cell.getCellFormula();
            case BLANK:
                return "";
            default:
                return null;
        }
    }

}
